The development of the EDVAC computer system of 1948 is often cited as the beginning of the computer era. Since that time, computer systems have evolved into extremely sophisticated devices, and computer systems may be found in many different settings. Computer systems typically include a combination of hardware, such as semiconductors and circuit boards, and software, also known as computer programs. Although advances in semiconductor processing and computer architecture have pushed the performance of the computer hardware higher, more sophisticated and complex computer programs also continue to evolve, which can rapidly consume the increased hardware capabilities. Thus, the performance and response time of computer systems continues to be a problem.
These performance problems can be especially acute when a computer system has multiple computer programs executing concurrently and competing for the same limited global physical resources, which must be shared among the computer programs. Examples of such global resources are the processor or processors and memory of the computer system.
In attempt to address these performance problems, some computer systems assign the work of computer programs to service classes and give the service classes priorities and performance goals. The computer systems then monitor the performance of the work and adjust the allocation of global computer resources among the service classes based on the priorities and whether the work is meeting the goals. For example, if work in a high-priority service class is not meeting its goal, the computer systems may give work in that high-priority service class more access to the processor and more memory, perhaps at the expense of work in a lower-priority service class.
Switching processors and memory between service classes can result in several problems. First, switching processors and memory are global, system-level adjustments that can drastically impact the performance of all computer programs on a system-wide basis. Second, it is difficult to predict how such gross adjustments will impact performance, and there may be errors and unintended side effects. Third, some programs attempt to manage their own resources and tune themselves, but they are unaware of how other programs are performing, so their local self-tuning efforts can conflict with the system-wide performance tuning efforts. Finally, a temporary spike in the workload of a program may cause it to tune itself to use more resources, but it may not release those resources when the spike subsides because the program is unaware of how its use of the resources impacts other programs. For example, a database application may increase its pool of database connections in response to a temporary spike in database transactions, but it might then keep those database connections indefinitely.
Without a better way to tune the performance of programs and service classes, the performance of computer systems will continue to suffer.